package com.xgj.controller;

import com.xgj.dto.BaseResponse;
import com.xgj.dto.ImportResult;
import com.xgj.exception.DataImportException;
import com.xgj.service.RandomUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

//全量接口导入
//http://localhost:9999/api/random-users/import
@RestController
@RequestMapping("/api/random-users")
public class RandomUserController {

    @Autowired
    private RandomUserService randomUserService;

    /*
    1.全局性错误（如外部接口调用失败、JSON 解析失败）：直接抛出异常，触发 Controller 层的 catch 块，返回 fail。
        那就无需构建ImportResult 返回了
    2.部分数据错误（如单条数据校验失败）：不抛出异常，返回包含失败记录的 ImportResult，
            Controller 返回 success 但标记部分失败。
     */
    @GetMapping("/import")
    public BaseResponse<ImportResult> importRandomUsers() {
        try {
            ImportResult result = randomUserService.importRandomUsers();
            return BaseResponse.success(result);
        }catch (DataImportException e) {
            // 根据自定义异常的错误码返回具体的错误信息
            //这里会有2种情况：1.外部接口调用失败  2.JSON 解析失败
            //这2种情况都是直接抛出DataImportException异常，无需组建ImportResult
            return BaseResponse.fail(e.getErrorCode().getCode(), e.getMessage());
        } catch (Exception e) {
            // 全局异常处理，返回系统错误
            return BaseResponse.fail(500, "系统繁忙，请稍后重试");
        }
    }
}
//1.全部成功
//2.抛出全局性错误（如外部接口调用失败、JSON 解析失败），这2种情况会执行 fail
//3.部分成功：错误的抛出异常会在for遍历每条数据那里catch处理
//发现如果是数据库密码错误，则项目可以启动，但是当调用接口就直接报错，不会走到具体插入数据那里才报错
